package service

import (
	"context"
	"task00/pkg/domain/osmData"
)

func (s *service) PutOsmData(ctx context.Context, userId string, id string, osm osmData.Region) (*osmData.Region, error) {
	idInt, err := s.checkIdParam(id)
	if err != nil {
		return nil, err
	}

	if _, err = s.checkLogin(ctx, userId); err != nil {
		return nil, err
	}

	existingOsm, err := s.repoOsm.Get(ctx, idInt)
	if err != nil {
		return nil, err
	}

	osm.ID = existingOsm.ID
	result, err := s.repoOsm.Put(ctx, idInt, &osm)
	if err != nil {
		return nil, err
	}

	return result, nil
}
func (s *service) PostOsmData(ctx context.Context, id string, reg osmData.Region) (*osmData.Region, error) {
	if _, err := s.checkLogin(ctx, id); err != nil {
		return nil, err
	}
	result, err := s.repoOsm.POST(ctx, &reg)
	if err != nil {
		return nil, err
	}
	return result, nil
}

func (s *service) GetOsmData(ctx context.Context, userId string, id string) (*osmData.Region, error) {
	idInt, err := s.checkIdParam(id)
	if err != nil {
		return nil, err
	}
	if _, err = s.checkLogin(ctx, userId); err != nil {
		return nil, err
	}

	result, err := s.repoOsm.Get(ctx, idInt)
	if err != nil {
		return nil, err
	}
	return result, nil
}

func (s *service) DeleteOsmData(ctx context.Context, userId string, id string) error {
	idInt, err := s.checkIdParam(id)
	if err != nil {
		return err
	}

	if _, err = s.checkLogin(ctx, userId); err != nil {
		return err
	}

	if err = s.repoOsm.Delete(ctx, idInt); err != nil {
		return err
	}
	return nil
}
